Previous topicNext topic
Help > Dynamic Dialog Tools (DDT) >
Menu Example

In the following code example, we create a dialog with a menu, outlining the concepts discussed in this chapter. Feel free to use this code as a base for your own DDT projects. This example is also available in your PowerBASIC installation, in the \PBWIN\SAMPLES\DDT\MENU folder.

 

'===========================================================

'

' Simple example of an application that has a menu and

' requires absolutely no API calls!

'

'===========================================================

 

#COMPILE EXE

 

%IDOK = 1

%IDCANCEL = 2

%IDTEXT = 100

%BN_CLICKED = 0

%BS_DEFAULT = 1

%MF_ENABLED = 0

%WM_COMMAND = &H111

 

%ID_OPEN = 401

%ID_EXIT = 402

%ID_OPTION1 = 403

%ID_OPTION2 = 404

%ID_HELP = 405

%ID_ABOUT = 406

 

'-----------------------------------------------------------

 

' ** Global variable to receive the user name

GLOBAL gsUserName AS STRING

 

'-----------------------------------------------------------

 

CALLBACK FUNCTION OkButton()

 IF CB.MSG = %WM_COMMAND AND CB.CTLMSG = %BN_CLICKED THEN

   CONTROL GET TEXT CB.HNDL, %IDTEXT TO gsUserName

   DIALOG END CB.HNDL, 1

   FUNCTION = 1

 END IF

END FUNCTION

 

'-----------------------------------------------------------

 

CALLBACK FUNCTION CancelButton()

 IF CB.MSG = %WM_COMMAND AND CB.CTLMSG = %BN_CLICKED THEN

   DIALOG END CB.HNDL, 0

   FUNCTION = 1

   END IF

 END FUNCTION

 

'-----------------------------------------------------------

 

CALLBACK FUNCTION DlgProc()

 IF CB.MSG = %WM_COMMAND THEN

   IF CB.CTL => %ID_OPEN AND CB.CTL <= %ID_ABOUT THEN

     MSGBOX "WM_COMMAND received from a menu item!", &H00002000& ' = %MB_TASKMODAL

     FUNCTION = 1

   END IF

 END IF

END FUNCTION

 

'-----------------------------------------------------------

 

FUNCTION PBMAIN () AS LONG

 LOCAL hDlg AS DWORD

 LOCAL lResult AS LONG

 LOCAL hMenu AS DWORD

 LOCAL hPopup1 AS DWORD

 LOCAL hPopup2 AS DWORD

 

 ' ** First create a top-level menu:

 MENU NEW BAR TO hMenu

 

 ' ** Add a top-level menu item with a popup menu:

 MENU NEW POPUP TO hPopup1

 MENU ADD POPUP, hMenu, "&File", hPopup1, %MF_ENABLED

 MENU ADD STRING, hPopup1, "&Open", %ID_OPEN, %MF_ENABLED

 MENU ADD STRING, hPopup1, "&Exit", %ID_EXIT, %MF_ENABLED

 MENU ADD STRING, hPopup1, "-", 0, 0

 

 ' ** Now we can add another item to the menu that will bring up a sub-menu.

 ' First we obtain a new popup menu handle to distinguish it from the first

 ' popup menu:

 MENU NEW POPUP TO hPopup2

 

 ' ** Now add a new menu item to the first menu.

 ' This item will bring up the sub-menu when selected:

 MENU ADD POPUP, hPopup1, "&More Options", hPopup2, %MF_ENABLED

 

 ' ** Now we will define the sub menu:

 MENU ADD STRING, hPopup2, "Option &1", %ID_OPTION1, %MF_ENABLED

 MENU ADD STRING, hPopup2, "Option &2", %ID_OPTION2, %MF_ENABLED

 

 ' ** Finally, we'll add a second top-level menu and popup.

 ' For this popup, we can reuse the first popup variable:

 MENU NEW POPUP TO hPopup1

 MENU ADD POPUP, hMenu, "&Help", hPopup1, %MF_ENABLED

 MENU ADD STRING, hPopup1, "&Help", %ID_HELP, %MF_ENABLED

 MENU ADD STRING, hPopup1, "-", 0, 0

 MENU ADD STRING, hPopup1, "&About", %ID_ABOUT, %MF_ENABLED

 

 ' ** Create a new dialog template

 DIALOG NEW 0, "What is your name?", ,, 160, 60, 0, 0 TO hDlg

 

 ' ** Add controls to it

 CONTROL ADD TEXTBOX, hDlg, %IDTEXT, "", 14, 12, 134, 12, 0

 CONTROL ADD BUTTON, hDlg, %IDOK, "OK", 34, 32, 40, 14, %BS_DEFAULT CALL OkButton

 CONTROL ADD BUTTON, hDlg, %IDCANCEL, "Cancel", 84, 32, 40, 14, 0 CALL CancelButton

 

 MENU ATTACH hMenu, hDlg

 

 ' ** Display the dialog

 DIALOG SHOW MODAL hDlg, CALL DlgProc TO lResult

 

 ' ** Check the dialog return result

 IF lResult THEN

   MSGBOX "Hello " & gsUserName

 END IF

END FUNCTION

 

'-----------------------------------------------------------

 

See Also

Menus

Menu Walkthrough

More on the Menu

Menu State